<?php
class Movie_UploadController extends Controller_Action_FrontAuth
{
	const TOKEN_NAME_SPACE = 'MOVIE_UPLOAD';
	
	/**
	 * ワンタイムトークンヘルパを取得します。
	 *
	 * @return Controller_Action_Helper_Token
	 */
	protected function _getToken()
	{
		return $this->_helper->Token->setNamespace(self::TOKEN_NAME_SPACE);
	}
	
	public function preDispatch()
	{
		parent::preDispatch();
		$this->_container = new Container_Form_MovieUpload();
	}
	
	public function indexAction()
	{
		$this->view->params = $this->_container;
		
		$this->view->token = $this->_getToken()->create();
		
		$this->_setViewRenderFile('index');
	}
	
	/**
	 * アップロード処理
	 * 
	 * @return
	 */
	public function relayAction()
	{
		$this->_container->setPropatys($this->_getAllParams());
		
		if(!$this->getRequest()->isPost()){
			return $this->_redirect('/movie_upload');
		}
		
		$form = new Form_MovieUpload($this->_container);
		if (!$form->isValid()) {
			// F5でのアップロードは絶対に防ぎたいのでリダイレクトする
			foreach($form->getMessages() as $message){
				$this->_getErrorMessenger()->addMessage($message);
			}
			return $this->_redirect('/movie_upload');
		}
		
		// ワンタイムトークンチェック
		if(!$this->_getToken()->isValid($this->_getParam('token'))){
			return $this->_throw403Error();
		}
		
		$dbMovie = new Db_Table_TMovie();
		$dbMovie->insertMovieUpload($this->_loginUser, $this->_container, $_FILES['movie']['tmp_name']);
		
		$this->_getStdMessenger()->addMessage('動画をアップロードしました。');
		$this->_redirect('/mypage');
	}
}